#name : updateRsUtils.pm
#author : Alexandre DUVAL
#mail : alexandre.duval@nantes.fr
#create date : 07.21.2010
#modified : 11.04.2010	

#This library contains the utilitary subroutines of updateRs.pl


package updteRsUtils; 
use strict;
use vars qw(@ISA @EXPORT);
use Exporter;
@ISA=qw(Exporter);
@EXPORT=qw( OPEN READ_CONFIG_INIFILE MAKEDIRE );

#########################################################################################################################
sub UNZIP 
{
   my ($cpfile,$dir) = @_;

   print "\n************************PROCESSING UNZIP FUNCTION************************\n";
   print "\n   FOR FILE : $cpfile\n   TO : $dir\n";
   print "\n*************************************************************************\n";

   chdir($dir) or die "Cannot change from current directory to $dir : $!\n";
    
   # Handle gzipped data
   if ($cpfile =~ /\.gz$/) 
   {
	my $cmd = "/bin/tar xfz $cpfile";
	my $r=system($cmd);
	if($r!=0) { die "Cmd failed $cmd return ($r): $!\n" }
	return;
   }

   # Handle bzip2 data
   if ($cpfile =~ /\.bz2$/) 
   {
       my $cmd = "/bin/tar xfj $cpfile";
       my $r=system($cmd);
       if($r!=0) { die "Cmd failed $cmd return ($r): $!\n" }
       return;
   }

    
   
}

###################################################################################################################################################################
sub ZIP #the files updated are compressing with gzip or Bzip2 
{

   my ($dir, $folder,$pre,$archive) = @_;
   my $process=0;

   print "\n************************PROCESSING ZIP FUNCTION************************\n";
   print "\n   FROM FILE : $folder\n";
   print "\n***********************************************************************\n";

   chdir($dir) or die "Cannot change from current directory to '$dir' $!\n";

   # Handle gzipped data
   if ($archive =~ /\.gz$/) 
   {
	my $newarchive=$pre."_".$folder.".tar.gz";
	my $cmd = "/bin/tar cfz $newarchive $folder";
	my $r=system($cmd);
	if($r!=0) { die "Cmd failed $cmd return ($r): $!\n" }
	$process=1;
   }
	
   # Handle bzip2 data
   if ($archive =~ /\.bz2$/) 
   {
       my $newarchive=$pre."_".$folder.".tar.bz2";
       my $cmd = "/bin/tar cfj $newarchive $folder";
       my $r=system($cmd);
       if($r!=0) { die "Cmd failed $cmd return ($r): $!\n" }
       $process=1;
   }
   
   if ($process==1)
   { 
   	DELETE_DIR_REC ("$dir/$folder");
   }
  
   return;
}
###################################################################################################################################################################
sub DELETE_DIR_REC  
{

#  Delete the directory with recursive method

    my ($Dir) = @_;
    my @files;

    opendir(DIR,$Dir) or print "Cannot open directory $Dir : $!\n";
    my @fichiers=readdir(DIR); 
    closedir(DIR);          
    foreach my $fic (@fichiers) 
    {
        if (($fic ne ".") && ($fic ne "..")) 
        {
            if (-d "$Dir/$fic") 
            {
                DELETE_DIR_REC("$Dir/$fic");
            }
            elsif (-f "$Dir/$fic")
            { 
                unlink("$Dir/$fic") or die "Cannot delete file $fic : $!\n";
            }
        }
    }
    rmdir($Dir) or print "Cannot delete directory $Dir : $!\n" ;
    return;
}


###################################################################################################################################################################
sub OPEN 
{
   my ($filename, $handle) = @_;

   # Handle gzipped data
   if ($filename =~ /\.gz$/) {
       my $cmd = "gunzip -c $filename";
       open($handle, "$cmd |") or
           die "Unable to invoke command '$cmd': $!\n";
       if (eof($handle)) { die "Cmd failed: '$cmd'\n"; }
       return;
   }
   # Handle bzip2 data
   if ($filename =~ /\.bz2$/) {
       my $cmd = "bunzip2 -c $filename";
       open($handle, "$cmd |") or
           die "Unable to invoke command '$cmd': $!\n";
       if (eof($handle)) { die "Cmd failed: '$cmd'\n"; }
       return;
   }
   # Handle normal file
   open($handle, $filename) or die "Unable to open file '$filename': $!\n";
   return;
}
###################################################################################################################################################################

sub READ_CONFIG_INIFILE
{
	my ($config_file) = @_;
	my %init=();
	my $section;

	open(CONFIG, $config_file) or die "Cannot read configuration file : $!\n";
		while( my $line=<CONFIG>)
		{
			
			chomp($line);			
			next if (($line eq '') or ($line =~ /^#/) or ($line =~ /^\n/)); #comments line
	
			if ($line=~/\[(.*)\]/) #is on section
       			{
			    $section=$1;
			   #print ("section : $section\n");
			   next;
			} 							   
			if ($line=~/.*=.*/) 
			{
				#print ("parametre : $line\n");
				do 
			     	{			
					my($parameter,$val)=split("=",$line);
					chomp($parameter);
					chomp($val);			   	
					$init{$section}{$parameter}=$val;
					#print ("section : $section, parametre : $parameter, valeur : $init{$section}{$parameter}\n");
					next;
				} while ($line=~/^.*\=.*$/);
			   }			 	
						

		}
	close(CONFIG);
	return %init;

}
#########################################################################################################################
sub MAKEDIRE
{
	my ($Rep)=@_;        
        unless ( -e $Rep ) # create a temporary folder to work
	{
		mkdir ($Rep, 0755) or die "Cannot make a new directory '$Rep': $!\n" ;
	}
	return;
}
#########################################################################################################################
sub MOVE
{
	my ($destFile,$originFile)=@_;
        
        rename($originFile, $destFile) or warn "Cannot move $originFile: $!\n";
	 
	return;
}
#########################################################################################################################
1;
